#ifndef __ADC__H__
#define __ADC__H__

#include "gd32f30x.h"
#include "delay.h"
#
#define  USE_ADC_0  1  // 使用ADC0

#if USE_ADC_0

// 6分频，120MHz / 6 = 20MHz
#define ADC0_CLOCK_DIV  RCU_CKADC_CKAPB2_DIV6   

//保存adc0常规通道转换结果的数组长度
//如果有多个通道那么长度等于通道个数即可
//如果只有一个通道 可以设置为10 保存10次转换的结果,根据这10次的结果来做滤波
#define ADC0_RESULT_DATA_ARR_LEN_MAX   10                      

//是否开启ADC连续模式
#define ADC0_CONTINUOUS_MODE_IS_OPEN   ENABLE  

//规则配置
#define ADC_CHANNEL_CONFIG()  { \
	/* 常规通道个数 */ \
	adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1); \
	/* 常规规则 : 指定ADC 外设  通道的优先级  配置的 ADC 通道   采样时间(239个周期)*/ \
	adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_12, ADC_SAMPLETIME_239POINT5);}

//GPIO配置
#define ADC0_GPIO_CONFIG()  {\
			rcu_periph_clock_enable(RCU_GPIOC);\
      gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_10MHZ, GPIO_PIN_2);}

			
			
/**
 * @desc  : ADC0初始化
 * @date  : 2025-04-07
 * @author: AnRui
 * @note  :
 */
void ADC0DrvInit(void);

/**
 * @desc  : 触发ADC0常规通道转换
 * @date  : 2025-02-25
 * @author: AnRui
 * @note  :
 */
void ADC0RoutineTrigger(void);


/**
 * @desc  : 触发ADC0注入通道转换
 * @date  : 2025-02-25
 * @author: AnRui
 * @note  :
 */
void ADC0InsertTrigger(void);

/**
 * @desc  :获取注入规则通道数据
 * @date  : 2025-02-25
 * @author: AnRui
 * @param :  inserted_channel - {参数说明}:
 * @return: uint16_t
 * @note  :注入通道取值: ADC_INSERTED_CHANNEL_0|ADC_INSERTED_CHANNEL_1|ADC_INSERTED_CHANNEL_2|ADC_INSERTED_CHANNEL_3
 */
uint16_t  GetADC0InsertChannelResult(uint8_t inserted_channel);

/**
 * @desc  : 获取保存adc0常规通道的结果的数组指针
 * @date  : 2025-04-07
 * @author: AnRui
 * @return: uint16_t*
 * @note  :
 */
uint16_t* GetADC0RoutineChannelResultArrPointer(void);

#endif


#endif

